const fs = require('fs');
const path = require('path');

// 导入文件上传模块
const multer = require('multer');

function assignDir() {
    // 上传文件的根目录
    const uploadRoot = './uploads';
    const date = new Date();
    const y = date.getFullYear();
    const m = (date.getMonth() + 1).toString().padStart(2, '0');
    const d = (date.getDate()).toString().padStart(2, '0');
    const subDir = `${y}${m}${d}`;
    const uploadPath = uploadRoot + '/' + subDir;
    if (!fs.existsSync(path.join(uploadRoot, subDir))) {
        // 创建文件夹
        fs.mkdirSync(path.join(uploadRoot, subDir));
    }
    return uploadPath;
}

// 上传文件存放目录
let uploadPath = assignDir();

// 设置上传文件保存目录和文件名
const storage = multer.diskStorage({
    // 设置存放图片的目录
    destination(req, file, cb) {
        cb(null, uploadPath);
    },
    // 自定义上传文件的名称和后缀
    filename(req, file, cb) {
        // 获取文件后缀
        const ext = file.originalname.split('.').pop();
        // 生成文件名
        const filename = Date.now() + '.' + ext;
        // 防止上传文件子目录没有生成
        assignDir();
        cb(null, filename);
    }
});
// 创建一个文件上传中间件实例
const upload = multer({
    // 存储位置信息
    storage,
    // 文件大小限制
    limits: {
        fileSize: 1024 * 1024 * 10
    },
    // 过滤文件: 那些文件上传, 那些不上传
    fileFilter(req, file, cb) {
        if (file.mimetype.startsWith('image')) {
            // 接收该文件
            cb(null, true);
        } else {
            // 拒绝该文件, null表示错误信息
            cb(null, false);
        }
    }
});


/**
 * 获取图片上传之后的路径地址
 * @param {Object} file文件对象
 * @return {string} 图片路径地址 
 * */
const getUploadedUrl = (file) => {
    console.log(file,213);
    // 从文件对象中获取图片路径地址
    const { path } = file;
    // 将图片路径地址中的  \\ 转为 /
    const url = path.replace(/\\/g, '/');
    return '/' + url;
}
module.exports = {
    upload,
    getUploadedUrl
};